import { NgModule } from '@angular/core'; // 引入Angular核心模块
import { CommonModule } from '@angular/common'; // 引入Angular公共模块
import { FormsModule } from '@angular/forms'; // 引入Angular表单模块
import { ConfigProvider, HotkeyProvider, TabContextMenuItemProvider } from 'tabby-core'; // 从tabby-core模块引入配置、热键和上下文菜单提供者
import { TerminalDecorator } from 'tabby-terminal'; // 从tabby-terminal模块引入终端装饰器
import { SettingsTabProvider } from 'tabby-settings'; // 从tabby-settings模块引入设置选项卡提供者

import { ClippyConfigProvider } from './configProvider'; // 引入自定义的Clippy配置提供者
import { ClippySettingsTabProvider } from './settingsTabProvider'; // 引入自定义的Clippy设置选项卡提供者
import { ClippySettingsTabComponent } from './settingsTab.component'; // 引入自定义的Clippy设置选项卡组件
import { ClippyDecorator } from './terminalDecorator'; // 引入自定义的Clippy终端装饰器
import { ClippyHotkeyProvider } from './hotkeyProvider'; // 引入自定义的Clippy热键提供者
import { ClippyContextMenuProvider } from './contextMenu'; // 引入自定义的Clippy上下文菜单提供者

@NgModule({
    imports: [
        CommonModule, // 导入公共模块
        FormsModule, // 导入表单模块
    ],
    providers: [
        { provide: TabContextMenuItemProvider, useClass: ClippyContextMenuProvider, multi: true }, // 提供自定义的上下文菜单提供者
        { provide: HotkeyProvider, useClass: ClippyHotkeyProvider, multi: true }, // 提供自定义的热键提供者
        { provide: ConfigProvider, useClass: ClippyConfigProvider, multi: true }, // 提供自定义的配置提供者
        { provide: SettingsTabProvider, useClass: ClippySettingsTabProvider, multi: true }, // 提供自定义的设置选项卡提供者
        { provide: TerminalDecorator, useClass: ClippyDecorator, multi: true }, // 提供自定义的终端装饰器
    ],
    declarations: [
        ClippySettingsTabComponent, // 声明自定义的Clippy设置选项卡组件
    ],
    entryComponents: [
        ClippySettingsTabComponent, // 指定自定义的Clippy设置选项卡组件为动态组件
    ],
})
export default class ClippyModule { } // 导出默认的Clippy模块
